同学们是否经常遇到这个问题,我期望在家里访问公司的电脑。但是公司的电脑是部署在内网,ip经过NAT的转换,根本无法知道哪一个是自己的设备。这个问题的解决方案之一就是使用内网穿透工具。今天就要介绍我们在2020-1-7-如何使用mac电脑连接你的windows设备 - huangtengxiao里最后提到的工具——frp。
fatedier/frp 是一个可用于内网穿透的高性能的反向代理程序。
其最突出的一个特点是支持内网穿透。
Frp原理
为什么frp能够做到内网穿透呢?
传统方式
我们先看一下传统的反向代理工具,例如Nginx。
当用户从公网访问web服务时,经过反向代理服务,将请求转发给实际运行后台程序的服务器。
但是需要注意的是,这种反向代理方式的配置都集中在服务端。
也就是说,Nginx知道各个服务实际运行在哪里。
但是,考虑这种更据现实情况。你的app服务运行在公司内网,而你手上只有一个远在美国的vps。
你在vps上部署的Nginx,根本没有办法知道你在公司内网中的设备。
Frp方式
那么有同学就会想,既然我vps有公网IP,那是不是可以让我,内网的设备主动到vps上面,注册一个服务呢?
没错,frp就是这样做的。
如下图,frp的服务端可以就是一个部署在公网的服务注册中心。
frp客户端,从内网连接frp服务端,然后注册自己的服务。
frp服务端将这个服务对外暴露,并将外部的请求转发至frp客户端。
这样,外网就可以访问内网设备部署的服务了。
使用Frp配置远程桌面(Tcp模式)
如上所述,有了frp,我们只需要将内网设备的远程桌面服务端口(3389)通过frp服务端向外暴露即可。
1. 配置frp服务端
从Releases · fatedier/frp下载你所需要的release版本。
在你的服务器上直接按照默认配置运行下面的代码即可
./frps -c ./frps.ini
2.配置frp客户端
在你对外提供远程桌面服务的内网pc上,运行frp客户端,配置如下
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000
[rdp]
type = tcp
local_ip = 127.0.0.1
# 远程桌面的端口号
local_port = 3389
# 远程桌面服务暴露在服务端的端口号
remote_port = 6000
然后调用启动命令
./frpc -c ./frpc.ini
3.远程桌面连接
此时你就可以通过微软的远程桌面客户端进行连接了
在另一台设备上使用你的frp服务器的公网ip
+远程桌面服务暴露在服务端的端口号
进行连接
参考文档:
本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E7%A5%9E%E5%99%A8frp.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。